package com.crm.api.service;

import com.crm.api.entity.WorkOrder;

import java.util.Map;

/**
 * 工单服务接口
 */
public interface WorkOrderService {

    /**
     * 获取工单列表（支持分页和筛选）
     */
    Map<String, Object> getWorkOrders(Integer page, Integer size, String title, 
                                    String orderType, String priority, String status,
                                    Integer customerId, Integer businessId, 
                                    Integer assignedTo, Integer createdBy);

    /**
     * 获取我的工单列表
     */
    Map<String, Object> getMyWorkOrders(String username, Integer page, Integer size, 
                                       String title, String orderType, String priority, String status);

    /**
     * 根据ID获取工单详情
     */
    WorkOrder getWorkOrderById(Integer id);

    /**
     * 根据ID获取工单详情（包含关联信息）
     */
    Map<String, Object> getWorkOrderDetailById(Integer id);

    /**
     * 创建工单
     */
    WorkOrder createWorkOrder(WorkOrder workOrder, String creatorUsername);

    /**
     * 更新工单
     */
    WorkOrder updateWorkOrder(WorkOrder workOrder);

    /**
     * 删除工单
     */
    boolean deleteWorkOrder(Integer id);

    /**
     * 分配工单
     */
    boolean assignWorkOrder(Integer id, Integer assignedTo);

    /**
     * 更新工单状态
     */
    boolean updateWorkOrderStatus(Integer id, String status);

    /**
     * 更新工单解决方案
     */
    boolean updateWorkOrderSolution(Integer id, String solution);

    /**
     * 更新工单解决方案（带操作人信息）
     */
    boolean updateWorkOrderSolution(Integer id, String solution, String operatorUsername);

    /**
     * 更新客户反馈
     */
    boolean updateCustomerFeedback(Integer id, String customerFeedback, Integer satisfactionRating);

    /**
     * 完成工单
     */
    boolean completeWorkOrder(Integer id);

    /**
     * 关闭工单
     */
    boolean closeWorkOrder(Integer id);

    /**
     * 获取工单统计信息
     */
    Map<String, Object> getWorkOrderStats(String startDate, String endDate, String orderType, Integer assignedTo);
}